// 装饰工具类代码

import ModelUtils from './ModelUtils'
import { BaseDesignInfo, TYPE_KEY_CLS } from '@/interfaceCom/iCustomPage'

// export interface CustPageCmpDesignInfo extends BaseDesignInfo {
//     elementClass: ElementClass<BasePageMdl>
// }

/**
 * 注册自定义组件,注意这里的装饰器用法，当使用装饰器时候需要传参，需要使用工程函数
 * 其中返回函数的参数指向的是当前类，以下面的方法为例pageCmpDesignInfo为装饰器传入
 * 的参数，Component 为当前被装饰的类
 */
export function CustPageComponent(pageCmpDesignInfo: BaseDesignInfo) {
    return (Component: any) => {
        ModelUtils.regCustPageEleCmp(Component.name, pageCmpDesignInfo)
    }
}

const nameClsMap: Map<string, { new (): any }> = new Map()

export function RegisterObject(alias?: string): ClassDecorator {
    return (target: any) => {
        const clsName = alias ? alias : target.name
        target.prototype[TYPE_KEY_CLS] = clsName
        if (nameClsMap.has(clsName)) {
            throw new Error(`Class ${clsName} 已存在！ 新的class是 ${target}，已存在的class是 ${nameClsMap.get(clsName)}`)
        }
        nameClsMap.set(clsName, target)
    }
}
